// 试解释如下代码为何是正确的
let x: object = new MyString();
// 子类型兼容，具体类型可以赋值给更抽象的类型


// 说明如下两种声明有什么异同
const x1: 'abc' = 'abc';
let x2: 'abc' = 'abc';

// 变量来说x1和小没什么不同，变量的类型和值都是相同的。
// 不同点：const和let语法要求不同let声明的可以重新赋值。但也只能赋值为'abc'。
// `let c2 = 'abc' as const;`在语义和效果上也与你的两个例子相同。当然，'as const'在字面上显得更清晰一些。